package com.demo.expertsystemdemo.service.mongodb.simple;

import com.demo.expertsystemdemo.entity.mongodb.ExpertInfo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.stereotype.Service;

import java.util.*;

@Slf4j
@Service
public class InsertDocumentService {

    private final MongoTemplate mongoTemplate;

    public InsertDocumentService(MongoTemplate mongoTemplate) {
        this.mongoTemplate = mongoTemplate;
    }

    /**
     * 插入【一条】文档数据，如果文档信息已经【存在就抛出异常】
     *
     * @return 插入的文档信息
     */
    public Object insertObject() {

        String collectionName = "expert_info";
        // 设置专家信息
        ExpertInfo expert = new ExpertInfo().setName(
                "lzb").setIdCard("123456789012345678").setAge(28).setProfessional("java").setGender("男").setRecord(
                Arrays.asList("java", "python", "c++")).setCreateTime(new Date());
        // 插入一条用户数据，如果文档信息已经存在就抛出异常
        ExpertInfo newExpert = mongoTemplate.insert(expert, collectionName);
        // 输出存储结果
        log.info("存储的专家信息为：{}", newExpert);
        return newExpert;
    }


    /**
     * 插入【多条】文档数据，如果文档信息已经【存在就抛出异常】
     *
     * @return 插入的多个文档信息
     *
     */
    public Object insertManyObject(){

        String collectionName = "expert_info";
        // 设置两个专家信息
        ExpertInfo expert1 = new ExpertInfo().setName(
                "lzb").setIdCard("123456789012345678").setAge(28).setProfessional("java").setGender("男").setRecord(
                Arrays.asList("java", "python", "ruby","rust")).setCreateTime(new Date());
        ExpertInfo expert2 = new ExpertInfo().setName(
                "jxy").setIdCard("1564987481562026561").setAge(25).setProfessional("C++").setGender("男").setRecord(
                Arrays.asList("c", "c++")).setCreateTime(new Date());
        // 使专家信息加入结合
        List<ExpertInfo> userList = new ArrayList<>();
        userList.add(expert1);
        userList.add(expert2);
        // 插入一条用户数据，如果某个文档信息已经存在就抛出异常
        Collection<ExpertInfo> newUserList = mongoTemplate.insert(userList, collectionName);
        // 输出存储结果
        for (ExpertInfo expertInfo : newUserList) {
            log.info("存储的专家信息为：{}", expertInfo);
        }
        return newUserList;
    }
}
